InertListView リファレンス                              作成 2009/12/16 LIUNQA 1.はじめに --------------------------------------------------------------------------------  慣性スクロールに対応したリストビューであるInertListView(以下、ILV)の仕様を以下 に示す。 2.概要 --------------------------------------------------------------------------------  ILV は Win32 上に作成されたウィンドウであり、複数の関数から構成されている。ウィ ンドウクラスとして登録してから使用する。登録後、通常の Win32 API のコントロール 同様に SendMessage 関数によりメッセージを送り利用する。  ILV は描画を担う部分とデータを管理する部分に分かれている。描画は InertListView.h、データ管理はILVItemList.hが担う。通常はこのセットで使用する。描 画部分はデータ管理で使用されている構造体のメンバには依存しない。よって、アプリケー ションにより項目のデータ構造を変更したい場合は、ILVItemList.h を入れ替えることに より対応できる。 3.描画部分(InertListView.h) --------------------------------------------------------------------------------  ILV の描画部分。 3.1 ウィンドウクラスの登録  ILVは利用する前にウィンドウクラスを登録する必要がある。登録のために以下の関数 を呼ぶ。ウィンドウクラス名には「WC_INERTLISTVIEW」を指定する。   ATOM InertListViewRegisterClass(HINSTANCE hInstance, LPTSTR szWindowClass)    hInstance     アプリケーションのインスタンス    szWindowClass     ウィンドウクラス名。「WC_INERTLISTVIEW」を指定する。  例)   if(!InertListViewRegisterClass(hInstance, WC_INERTLISTVIEW))     return(FALSE); 3.2 送信メッセージ --------------------------------------------------------------------------------  ILV に処理を依頼する場合、通常のウィンドウコントロール同様にSendMessage 関数に てメッセージを送信して行う。以下に各メッセージを示す。 <一覧> ( 1)WM_SETFONT      リスト表示のフォントのハンドルを設定する。 ( 2)WM_GETFONT      設定されているリスト表示のフォントのハンドルを取得する。 ( 3)ILVM_DELETEALLITEMS  項目リストが保持している全項目を削除する。 ( 4)ILVM_ADDITEM     指定の項目を項目リストの末尾に追加する。 ( 5)ILVM_INSERTITEM    項目リストの指定の位置に項目を挿入する。 ( 6)ILVM_DELETEITEM    項目リストの指定の位置の項目を削除する。 ( 7)ILVM_FINDITEM     項目リストから指定条件の項目を検索する。 ( 8)ILVM_GETITEMSTATE   指定の項目のステータスを取得する。 ( 9)ILVM_SETITEMSTATE   指定の項目にステータスを設定する。 (10)ILVM_GETITEMCOUNT   項目リストが保持している項目数を取得する。 (11)ILVM_GETITEMRECT   指定の項目の表示領域サイズを取得する。 (12)ILVM_GETITEMHEIGHT  指定の項目の表示高さを取得する。 (13)ILVM_SETITEMHEIGHT  指定の項目に表示高さを設定する。 (14)ILVM_GETITEM     指定の項目の値を指定の構造体に取得する。 (15)ILVM_SETITEM     指定の項目に構造体の値を設定する。 (16)ILVM_RELEASEITEM   項目の構造体に格納されている領域を解放、初期化する。 (17)ILVM_GETTOPINDEX   現在表示されているリストの先頭項目のインデックスを取得する。 (18)ILVM_SETTOPINDEX   リストの先頭に表示する項目を設定する。 (19)ILVM_GETCURSEL    現在選択されている項目のインデックスを取得する。 (20)ILVM_SETCURSEL    現在選択されている項目を設定する。 (21)ILVM_SETBKNULL    項目がない領域の色を設定する。 (22)ILVM_GETBKNULL    項目がない領域の色を取得する。 (23)ILVM_SETTEXTCOLOR   非選択時の項目の文字の色を設定する。 (24)ILVM_GETTEXTCOLOR   非選択時の項目の文字の色を取得する。 (25)ILVM_SETTEXTSHADOWCOLOR 非選択時の項目の文字の影の色を設定する。 (26)ILVM_GETTEXTSHADOWCOLOR 非選択時の項目の文字の影の色を取得する。 (27)ILVM_SETBKCOLOR    非選択時の項目の背景色を設定する。 (28)ILVM_GETBKCOLOR    非選択時の項目の背景色を取得する。 (29)ILVM_SETBRDRCOLOR   非選択時の項目の境界線の色を設定する。 (30)ILVM_GETBRDRCOLOR   非選択時の項目の境界線の色を取得する。 (31)ILVM_SETSELTEXTCOLOR 選択時の項目の文字の色を設定する。 (32)ILVM_GETSELTEXTCOLOR 選択時の項目の文字の色を取得する。 (33)ILVM_SETSELTEXTSHADOWCOLOR 選択時の項目の文字の影の色を設定する。 (34)ILVM_GETSELTEXTSHADOWCOLOR 選択時の項目の文字の影の色を取得する。 (35)ILVM_SETSELBKCOLOR  選択時の項目の背景色を設定する。 (36)ILVM_GETSELBKCOLOR  選択時の項目の背景色を取得する。 (37)ILVM_SETSELBRDRCOLOR 選択時の項目の境界線の色を設定する。 (38)ILVM_GETSELBRDRCOLOR 選択時の項目の境界線の色を取得する。 (39)ILVM_SETFNPTR     指定の機能の補助関数を設定する。 (40)ILVM_GETFNPTR     指定の機能の補助関数のポインタを取得する。 (41)ILVM_ISMOVING     リストが移動(ドラッグおよび慣性スクロール)中かを取得する。 (42)ILVM_SETINRTLVSTYLE  ILVの拡張ウィンドウスタイルを設定する。 (43)ILVM_GETINRTLVSTYLE  ILVの拡張ウィンドウスタイルを取得する。 (44)ILVM_EXECBUTTONUP   ILVにて移動(ドラッグおよび慣性スクロール)が無い場合における WM_LBUTTONUP の処理を実行する。 <詳細> (1)WM_SETFONT  リスト表示のフォントのハンドルを設定する。  wParam = (WPARAM)(HFONT)hFont  lParam = 0  引数   hFont     フォントのハンドル(HFONT)。NULLの場合は既定のフォント。   lParam     未使用。  補足   このメッセージを送信すると一項目の高さを指定したフォント1文字の高さに調整します。  戻り値   なし。 (2)WM_GETFONT  設定されているリスト表示のフォントのハンドルを取得する。  wParam = 0  lParam = 0  引数   wParam     未使用。   lParam     未使用。  戻り値   現在設定されているフォントのハンドル(HFONT)。 (3)ILVM_DELETEALLITEMS  項目リストが保持している全項目を削除する。  wParam = 0  lParam = 0  引数   wParam     未使用。   lParam     未使用。  補足   既定では ILVItemDeleteList 関数を呼出す。ILVM_SETFNPTR メッセージの wParam  に ILVI_FN_DELETEALLITEMS を指定することにより他の関数を指定することが可能。  戻り値   ILVI_FN_DELETEALLITEMS で指定されている関数の戻り値。 (4)ILVM_ADDITEM  指定の項目を項目リストの末尾に追加する。  wParam = 0  lParam = (LPARAM)(stILVItemInfo*)pstItem  引数   wParam     未使用。   pstItem     登録する項目の値を格納した構造体のポインタを指定する。構造体は既定では    stILVItemInfo。補足のとおり他の関数を指定した場合は、その関数が規定する構    造体を指定する。  補足   既定では ILVItemAddItem 関数を呼出す。ILVM_SETFNPTR メッセージの wParam  に ILVI_FN_ADDITEM を指定することにより他の関数を指定することが可能。  戻り値   ILVI_FN_ADDITEM で指定されている関数の戻り値。 (5)ILVM_INSERTITEM  項目リストの指定の位置に項目を挿入する。  wParam = (WPARAM)iItem  lParam = (LPARAM)(stILVItemInfo*)pstItem  引数   iItem     挿入する項目のインデックス。   pstItem     挿入する項目の値を格納した構造体のポインタを指定する。構造体は既定では    stILVItemInfo。補足のとおり他の関数を指定した場合は、その関数が規定する構    造体を指定する。  補足   既定では ILVItemInsertItem 関数を呼出す。ILVM_SETFNPTR メッセージの wParam  に ILVI_FN_INSERTITEM を指定することにより他の関数を指定することが可能。  戻り値   ILVI_FN_INSERTITEM で指定されている関数の戻り値。 (6)ILVM_DELETEITEM  項目リストの指定の位置の項目を削除する。  wParam = (WPARAM)iItem  lParam = 0  引数   iItem     削除する項目のインデックス。   lParam     未使用。  補足   既定では ILVItemDeleteItem 関数を呼出す。ILVM_SETFNPTR メッセージの wParam  に ILVI_FN_DELETEITEM を指定することにより他の関数を指定することが可能。  戻り値   ILVI_FN_DELETEITEM で指定されている関数の戻り値。 (7)ILVM_FINDITEM  項目リストから指定条件の項目を検索する。  wParam = (WPARAM)iStart  lParam = (LPARAM)(stILVItemInfo*)pstItem  引数   iStart     検索を開始する項目のインデックス。最初の項目のインデックスは0。   pstItme     検索する項目の条件を指定した構造体のポインタ。既定では stILVItemInfo 構    造体を指定する。stILVItemInfo 構造体のメンバ pszText に完全一致する項目を    検索する。  補足   既定では ILVItemFindItem 関数を呼出す。ILVM_SETFNPTR メッセージの wParam  に ILVI_FN_FINDITEM を指定することにより他の関数を指定することが可能。  戻り値   ILVI_FN_FINDITEM で指定されている関数の戻り値。   ILVItemFindItem 関数は該当する項目が見つかった場合は、その項目のインデックス、  見つからなかった場合は -1を返す。 (8)ILVM_GETITEMSTATE  指定の項目のステータスを取得する。  wParam = (WPARAM)iItem  lParam = 0  引数   iItem     項目のインデックス。   lParam     未使用。  補足   既定では ILVItemGetItemState 関数を呼出す。ILVM_SETFNPTR メッセージの wParam  に ILVI_FN_GETITEMSTATE を指定することにより他の関数を指定することが可能。  戻り値   ILVI_FN_FINDITEM で指定されている関数の戻り値。   ILVItemGetItemState 関数は項目のステータスの値を返す。   詳細は項目リストの4.2参照。 (9)ILVM_SETITEMSTATE  指定の項目にステータスを設定する。  wParam = (WPARAM)iItem  lParam = (LPARAM)iStat  引数   iItem     項目のインデックス。   iStat     項目のステータスの値。詳細は項目リストの4.2参照。  補足   既定では ILVItemSetItemState 関数を呼出す。ILVM_SETFNPTR メッセージの wParam  に ILVI_FN_SETITEMSTATE を指定することにより他の関数を指定することが可能。  戻り値   ILVI_FN_SETITEMSTATE で指定されている関数の戻り値。 (10)ILVM_GETITEMCOUNT  項目リストが保持している項目数を取得する。  wParam = 0  lParam = 0  引数   wParam     未使用。   lParam     未使用。  補足   既定では ILVItemGetItemNum 関数を呼出す。ILVM_SETFNPTR メッセージの wParam  に ILVI_FN_GETITEMCOUNT を指定することにより他の関数を指定することが可能。  戻り値   ILVI_FN_GETITEMCOUNT で指定されている関数の戻り値。   ILVItemGetItemNum 関数は項目リストが保持している項目数を返す。 (11)ILVM_GETITEMRECT  指定の項目の表示領域サイズを取得する。  wParam = (WPARAM)iItem  lParam = (LPARAM)(LPRECT)prc  引数   iItem     項目のインデックス。     ILVI_DEFAULT を指定した場合、個々の項目でなく、リスト全体に設定されてい    る表示領域サイズを返す。   prc     表示領域サイズを取得するRECT構造体のポインタ。  戻り値   なし。 (12)ILVM_GETITEMHEIGHT  指定の項目の表示高さを取得する。  wParam = (WPARAM)iItem  lParam = 0  引数   iItem     項目のインデックス。     ILVI_DEFAULT を指定した場合、個々の項目でなく、リスト全体に設定されてい    る既定の表示高さを返す。   lParam     未使用。  補足   既定では ILVItemGetItemHeight 関数を呼出す。ILVM_SETFNPTR メッセージの wParam  に ILVI_FN_GETITEMHEIGHT を指定することにより他の関数を指定することが可能。  戻り値   ILVI_FN_GETITEMHEIGHT で指定されている関数の戻り値。   ILVItemGetItemHeight 関数は項目の表示高さを返す。 (13)ILVM_SETITEMHEIGHT  指定の項目に表示高さを設定する。  wParam = (WPARAM)iItem  lParam = (LPARAM)iHeight  引数   iItem     項目のインデックス。     ILVI_DEFAULT を指定した場合、個々の項目でなく、リスト全体に既定の表示高    さを設定する。   iHeight     設定する項目の表示高さ。  補足   既定では ILVItemSetItemHeight 関数を呼出す。ILVM_SETFNPTR メッセージの wParam  に ILVI_FN_SETITEMHEIGHT を指定することにより他の関数を指定することが可能。  戻り値   なし。 (14)ILVM_GETITEM  指定の項目の値を指定の構造体に取得する。  wParam = (WPARAM)iItem  lParam = (LPARAM)(stILVItemInfo*)pstItem  引数   iItem     項目のインデックス。   pstItem     取得した値を格納する項目の構造体のポインタ。  補足   既定では ILVItemGetItem 関数を呼出す。ILVM_SETFNPTR メッセージの wParam に  ILVI_FN_GETITEM を指定することにより他の関数を指定することが可能。   pstItem に取得した項目の値は不要になったら ILVM_RELEASEITEM メッセージにより  領域を解放する。  戻り値   ILVI_FN_GETITEM で指定されている関数の戻り値。 (15)ILVM_SETITEM  指定の項目に構造体の値を設定する。  wParam = (WPARAM)iItem  lParam = (LPARAM)(stILVItemInfo*)pstItem  引数   iItem     項目のインデックス。   pstItem     設定する項目の値を格納した構造体のポインタ。  補足   既定では ILVItemSetItem 関数を呼出す。ILVM_SETFNPTR メッセージの wParam に  ILVI_FN_SETITEM を指定することにより他の関数を指定することが可能。  戻り値   ILVI_FN_SETITEM で指定されている関数の戻り値。 (16)ILVM_RELEASEITEM  項目の構造体に格納されている領域を解放、初期化する。  wParam = 0  lParam = (LPARAM)(stILVItemInfo*)pstItem  引数   wParam     未使用。   pstItem     領域を解放する項目の構造体のポインタ。  補足   既定では ILVItemReleaseItem 関数を呼出す。ILVM_SETFNPTR メッセージの wParam  に ILVI_FN_RELEASEITEM を指定することにより他の関数を指定することが可能。   このメッセージは指定の構造体が保持する領域のみ解放し、項目リストが保持する項  目には影響を与えない。  戻り値   ILVI_FN_RELEASEITEM で指定されている関数の戻り値。 (17)ILVM_GETTOPINDEX  現在表示されているリストの先頭項目のインデックスを取得する。  wParam = 0  lParam = 0  引数   wParam     未使用。   lParam     未使用。  戻り値   現在表示されているリストの先頭項目のインデックス。 (18)ILVM_SETTOPINDEX  リストの先頭に表示する項目を設定する。  wParam = (WPARAM)iItem  lParam = 0  引数   iItem     項目のインデックス。   lParam     未使用。  戻り値   正常に処理が完了した場合は0、エラーが発生した場合は負の値を返す。 (19)ILVM_GETCURSEL  現在選択されている項目のインデックスを取得する。  wParam = 0  lParam = 0  引数   wParam     未使用。   lParam     未使用。  戻り値   現在選択されている項目のインデックス。 (20)ILVM_SETCURSEL  現在選択されている項目を設定する。  wParam = (WPARAM)iItem  lParam = 0  引数   iItem     項目のインデックス。   lParam     未使用。  戻り値   正常に処理が完了した場合は0、エラーが発生した場合は負の値を返す。 (21)ILVM_SETBKNULL  項目がない領域の色を設定する。  wParam = 0  lParam = (LPARAM)(COLORREF)clr  引数   wParam     未使用。   clr     色  戻り値   なし。 (22)ILVM_GETBKNULL  項目がない領域の色を取得する。  wParam = 0  lParam = 0  引数   wParam     未使用。   lParam     未使用。  戻り値   項目がない領域の色を COLORREF 型にて返す。 (23)ILVM_SETTEXTCOLOR  非選択時の項目の文字の色を設定する。  wParam = 0  lParam = (LPARAM)(COLORREF)clr  引数   wParam     未使用。   clr     色  戻り値   なし。 (24)ILVM_GETTEXTCOLOR  非選択時の項目の文字の色を取得する。  wParam = 0  lParam = 0  引数   wParam     未使用。   lParam     未使用。  戻り値   項目の文字の色を COLORREF 型にて返す。 (25)ILVM_SETTEXTSHADOWCOLOR  非選択時の項目の文字の影の色を設定する。  wParam = 0  lParam = (LPARAM)(COLORREF)clr  引数   wParam     未使用。   clr     色  補足   ここで設定した色は ILVS_TEXTSHADOW ウィンドウスタイルを設定時、有効。  戻り値   なし。 (26)ILVM_GETTEXTSHADOWCOLOR  非選択時の項目の文字の影の色を取得する。  wParam = 0  lParam = 0  引数   wParam     未使用。   lParam     未使用。  戻り値   項目の文字の影の色を COLORREF 型にて返す。 (27)ILVM_SETBKCOLOR  非選択時の項目の背景色を設定する。  wParam = 0  lParam = (LPARAM)(COLORREF)clr  引数   wParam     未使用。   clr     色  戻り値   なし。 (28)ILVM_GETBKCOLOR  非選択時の項目の背景色を取得する。  wParam = 0  lParam = 0  引数   wParam     未使用。   lParam     未使用。  戻り値   項目の背景色を COLORREF 型にて返す。 (29)ILVM_SETBRDRCOLOR  非選択時の項目の境界線の色を設定する。  wParam = 0  lParam = (LPARAM)(COLORREF)clr  引数   wParam     未使用。   clr     色  戻り値   なし。 (30)ILVM_GETBRDRCOLOR  非選択時の項目の境界線の色を取得する。  wParam = 0  lParam = 0  引数   wParam     未使用。   lParam     未使用。  戻り値   項目の境界線の色を COLORREF 型にて返す。 (31)ILVM_SETSELTEXTCOLOR  選択時の項目の文字の色を設定する。  wParam = 0  lParam = (LPARAM)(COLORREF)clr  引数   wParam     未使用。   clr     色  戻り値   なし。 (32)ILVM_GETSELTEXTCOLOR  選択時の項目の文字の色を取得する。  wParam = 0  lParam = 0  引数   wParam     未使用。   lParam     未使用。  戻り値   項目の文字の色を COLORREF 型にて返す。 (33)ILVM_SETSELTEXTSHADOWCOLOR  選択時の項目の文字の影の色を設定する。  wParam = 0  lParam = (LPARAM)(COLORREF)clr  引数   wParam     未使用。   clr     色  補足   ここで設定した色は ILVS_TEXTSHADOW ウィンドウスタイルを設定する必要がある。  戻り値   なし。 (34)ILVM_GETSELTEXTSHADOWCOLOR  選択時の項目の文字の影の色を取得する。  wParam = 0  lParam = 0  引数   wParam     未使用。   lParam     未使用。  戻り値   項目の文字の影の色を COLORREF 型にて返す。 (35)ILVM_SETSELBKCOLOR  選択時の項目の背景色を設定する。  wParam = 0  lParam = (LPARAM)(COLORREF)clr  引数   wParam     未使用。   clr     色  戻り値   なし。 (36)ILVM_GETSELBKCOLOR  選択時の項目の背景色を取得する。  wParam = 0  lParam = 0  引数   wParam     未使用。   lParam     未使用。  戻り値   項目の背景色を COLORREF 型にて返す。 (37)ILVM_SETSELBRDRCOLOR  選択時の項目の境界線の色を設定する。  wParam = 0  lParam = (LPARAM)(COLORREF)clr  引数   wParam     未使用。   clr     色  戻り値   なし。 (38)ILVM_GETSELBRDRCOLOR  選択時の項目の境界線の色を取得する。  wParam = 0  lParam = 0  引数   wParam     未使用。   lParam     未使用。  戻り値   項目の境界線の色を COLORREF 型にて返す。 (39)ILVM_SETFNPTR  指定の機能の補助関数を設定する。  wParam = (WPARAM)iFn  lParam = (LPARAM)(void*)pFn  引数   iFn     補助関数のID。補助関数のIDに関しては3.3参照。   pFn     補助関数のポインタ。  戻り値   なし。 (40)ILVM_GETFNPTR  指定の機能の補助関数のポインタを取得する。  wParam = (WPARAM)iFn  lParam = 0  引数   iFn     補助関数のID。補助関数のIDに関しては3.3参照。   lParam     未使用。  戻り値   補助関数のポインタ。 (41)ILVM_ISMOVING  リストが移動(ドラッグおよび慣性スクロール)中かを取得する。  wParam = 0  lParam = 0  引数   wParam     未使用。   lParam     未使用。  戻り値   静止中なら0、移動中なら1を返す。 (42)ILVM_SETINRTLVSTYLE  ILVの拡張ウィンドウスタイルを設定する。  wParam = (WPARAM)uiMask  lParam = (LPARAM)ulStyle  引数   uiMask     どの拡張ウィンドウスタイルのビットを変更するかを指定するマスク。   ulStyle     拡張ウィンドウスタイルのビットの新しい値 補足   指定可能な拡張ウィンドウスタイルについては3.4.2参照。  戻り値   なし。 (43)ILVM_GETINRTLVSTYLE  ILVの拡張ウィンドウスタイルを取得する。  wParam = (WPARAM)uiMask  lParam = 0  引数   uiMask     どの拡張ウィンドウスタイルのフラグを返すかを指定するマスク。   lParam     未使用。 補足   指定可能な拡張ウィンドウスタイルについては3.4.2参照。  戻り値   指定した拡張ウィンドウスタイルの状態フラグを返す。 (44)ILVM_EXECBUTTONUP  ILVにて移動(ドラッグおよび慣性スクロール)が無い場合における WM_LBUTTONUP の処 理を実行する。  wParam = 0  lParam = 0  引数   wParam     未使用。   lParam     未使用。  補足   ILVをサブクラス化によりタップ&ホールドをユーザカスタマイズする場合、  WM_LBUTTONUP の処理が行われない。このため、タップ&ホールド成立時、このメッセー  ジを WM_LBUTTONDOWN メッセージ処理から呼び出す必要がある。  戻り値   なし。 3.3 通知メッセージ --------------------------------------------------------------------------------  ILVからアプリケーションへ通知するメッセージを以下に示す。以下のメッセージのマクロは内部で宣言しているが、他のメッセージの値と重なる場合は"InertListView.h"をインクルードする前に宣言することにより値を変更することができる。 (1)ILVM_SCROLL_START (既定値は WM_USER + 0x0100)  リストがドラッグから慣性スクロールに遷移した時点で発生する。  wParam = 0  lParam = 0  引数   wParam     未使用。   lParam     未使用。 (2)ILVM_SCROLL_END (既定値は WM_USER + 0x0101)  慣性スクロールが終了した時点で発生する。  wParam = 0  lParam = 0  引数   wParam     未使用。   lParam     未使用。 3.4 補助関数 --------------------------------------------------------------------------------  補助関数はILVを構成する処理の一部を関数化したものである。この補助関数を入替え ることにより、ILVをカスタマイズすることができる。補助関数は主にILVの描画部分と項 目リストの連携部分に利用される。これにより、描画部分と項目リストの独立性を高めて いる。  補助関数のIDと、その役割を以下に示す。 ( 1)ILVI_FN_NULL     無処理の関数。 ( 2)ILVI_FN_INITLIST   項目リストの初期化。 ( 3)ILVI_FN_DELETELIST  項目リストの破棄。 ( 4)ILVI_FN_DELETEALLITEMS 全項目の削除。 ( 5)ILVI_FN_ADDITEM    項目リストの末尾に項目を追加。 ( 6)ILVI_FN_INSERTITEM  項目リストの指定の位置に項目を挿入。 ( 7)ILVI_FN_DELETEITEM  項目リストから指定の位置の項目を削除。 ( 8)ILVI_FN_FINDITEM   項目の検索。 ( 9)ILVI_FN_GETITEMSTATE 指定項目の状態を取得する。 (10)ILVI_FN_SETITEMSTATE 指定項目の状態を設定する。 (11)ILVI_FN_GETITEMCOUNT 項目リストが保持する項目数の取得。 (12)ILVI_FN_GETITEMHEIGHT 指定項目の表示高さを取得する。 (13)ILVI_FN_SETITEMHEIGHT 指定項目の表示高さを設定する。 (14)ILVI_FN_GETITEM    項目リストにて指定位置の項目の値を取得する。 (15)ILVI_FN_SETITEM    項目リストにて指定位置の項目の値を上書きする。 (16)ILVI_FN_GETDISPLAYITEM 指定項目を表示する時の文字列を取得する。 (17)ILVI_FN_DRAWITEM   項目をある個所の描画を行う。 (18)ILVI_FN_DRAWITEMBKGD 項目をない個所の描画を行う。 (1)ILVI_FN_NULL  無処理の関数。  関数宣言   LRESULT ()(HWND hWnd, UINT uiMsg, WPARAM wParam, LPARAM lParam)  引数   hWnd    ウィンドウハンドル。未使用。   uiMsg    メッセージID。未使用。   wParam    未使用。   lParam    未使用。  既定の関数   InrtListViewOnNull  戻り値   なし。 (2)ILVI_FN_INITLIST  項目リストの初期化。  関数宣言   int ()(stListInfo* pstList)  引数   pstList    項目リストのポインタ。  既定の関数   ILVItemInitList  戻り値   なし。 (3)ILVI_FN_DELETELIST  項目リストの破棄。  関数宣言   int ()(stListInfo* pstList)  引数   pstList    項目リストのポインタ。  既定の関数   ILVItemDeleteList  戻り値   なし。 (4)ILVI_FN_DELETEALLITEMS  全項目の削除。  関数宣言   int ()(stListInfo* pstList)  引数   pstList    項目リストのポインタ。  既定の関数   ILVItemDeleteList  戻り値   なし。 (5)ILVI_FN_ADDITEM  項目リストの末尾に項目を追加。  関数宣言   int ()(stListInfo* pstList, stILVItemInfo* pstItem)  引数   pstList    項目リストのポインタ。   pstItem    項目情報。  既定の関数   ILVItemAddItem  戻り値   なし。 (6)ILVI_FN_INSERTITEM  項目リストの指定の位置に項目を挿入。  関数宣言   int ()(stListInfo* pstList, int iItem, stILVItemInfo* pstItem)  引数   pstList    項目リストのポインタ。   iItem    項目の挿入位置のインデックス。   pstItem    項目情報。  既定の関数   ILVItemInsertItem  戻り値   なし。 (7)ILVI_FN_DELETEITEM  項目リストから指定の位置の項目を削除。  関数宣言   int ()(stListInfo* pstList, int iItem)  引数   pstList    項目リストのポインタ。   iItem    削除項目のインデックス。  既定の関数   ILVItemDeleteItem  戻り値   なし。 (8)ILVI_FN_FINDITEM  項目の検索。  関数宣言   int ()(stListInfo* pstList, int nStart, stILVItemInfo* pstItem)  引数   pstList    項目リストのポインタ。   nStart    検索開始位置のインデックス。   pstItem    検索条件。条件の指定方法は項目リストに依存。  既定の関数   ILVItemFindItem  戻り値   条件に該当する項目のインデックス。該当する項目がない場合は -1。 (9)ILVI_FN_GETITEMSTATE  指定項目の状態を取得する。  関数宣言   unsigned int ()(stListInfo* pstList, int iItem)  引数   pstList    項目リストのポインタ。   iItem    取得する項目位置のインデックス。  既定の関数   ILVItemGetItemState  補足   項目の状態は4.xを参照。  戻り値   指定項目の状態。 (10)ILVI_FN_SETITEMSTATE  指定項目の状態を設定する。  関数宣言   int ()(stListInfo* pstList, int iItem, unsigned int uiStat)  引数   pstList    項目リストのポインタ。   iItem    設定する項目位置のインデックス。   uiStat    項目の状態。  既定の関数   ILVItemSetItemState  補足   項目の状態は4.xを参照。  戻り値   なし。 (11)ILVI_FN_GETITEMCOUNT  項目リストが保持する項目数の取得。  関数宣言   int ()(stListInfo* pstList)  引数   pstList    項目リストのポインタ。  既定の関数   ILVItemGetItemNum  戻り値   項目リストが保持する項目数。 (12)ILVI_FN_GETITEMHEIGHT  指定項目の表示高さを取得する。  関数宣言   int ()(stListInfo* pstList, int iItem)  引数   pstList    項目リストのポインタ。   iItem    取得する項目位置のインデックス。  既定の関数   ILVItemGetItemHeight  戻り値   指定項目の表示高さ。 (13)ILVI_FN_SETITEMHEIGHT  指定項目の表示高さを設定する。  関数宣言   int ()(stListInfo* pstList, int iItem, int iHeight)  引数   pstList    項目リストのポインタ。   iItem    設定する項目位置のインデックス。   iHeight    項目の表示高さ。  既定の関数   ILVItemSetItemHeight  戻り値   なし。 (14)ILVI_FN_GETITEM  項目リストにて指定位置の項目の値を取得する。  関数宣言   int ()(stListInfo* pstList, int iItem, stILVItemInfo* pstItem)  引数   pstList    項目リストのポインタ。   iItem    取得する項目位置のインデックス。   pstItem    項目の構造体のポインタ。  既定の関数   ILVItemGetItem  補足   取得した値は pstItem に格納される。ここで確保された領域は ILVM_RELEASEITEM  メッセージにて解放する。  戻り値   なし。 (15)ILVI_FN_SETITEM  項目リストにて指定位置の項目の値を上書きする。  関数宣言   int ()(stListInfo* pstList, int iItem, stILVItemInfo* pstItem)  引数   pstList    項目リストのポインタ。   iItem    上書きする項目位置のインデックス。   pstItem    項目の構造体のポインタ。  既定の関数   ILVItemSetItemData  戻り値   なし。 (16)ILVI_FN_GETDISPLAYITEM  指定項目を表示する時の文字列を取得する。  関数宣言   LPCTSTR ()(stListInfo* pstList, int iItem)  引数   pstList    項目リストのポインタ。   iItem    取得する項目位置のインデックス。  既定の関数   ILVItemGetDisplayItem  補足   取得した領域は呼び出し側で解放しなければならない。該当する項目がない場合は  NULL。   既定では InrtListViewOnDrawItem 関数から呼ばれる。  戻り値   なし。 (17)ILVI_FN_DRAWITEM  項目をある個所の描画を行う。  関数宣言   LRESULT ()(HWND hWnd, UINT uiMsg, WPARAM wParam, LPARAM lParam)  引数   hWnd    ウィンドウハンドル。   uiMsg    メッセージID。   wParam    未使用。   lParam    描画に関係する情報を格納した stInrtListDrawArg 構造体のポインタ。   stInrtListDrawArg 構造体に関しては3.5.2参照。  既定の関数   InrtListViewOnDrawItem  補足   描画必要な各種情報は GetWindowLong 関数の第2引数に GWL_USERDATA を指定して取  得できるアドレスに格納されている構造体から取得する。このアドレスは  stInrtListView 構造体のポインタになっている。stInrtListView 構造体に関しては  3.5.1参照。  戻り値   なし。 (18)ILVI_FN_DRAWITEMBKGD  項目をない個所の描画を行う。  関数宣言   LRESULT ()(HWND hWnd, UINT uiMsg, WPARAM wParam, LPARAM lParam)  引数   hWnd    ウィンドウハンドル。   uiMsg    メッセージID。   wParam    未使用。   lParam    描画に関係する情報を格納した stInrtListDrawArg 構造体のポインタ。   stInrtListDrawArg 構造体に関しては3.5.2参照。  既定の関数   InrtListViewOnDrawItemBkgrnd  補足   描画必要な各種情報は GetWindowLong 関数の第2引数に GWL_USERDATA を指定して取  得できるアドレスに格納されている構造体から取得できる。このアドレスは  stInrtListView 構造体のポインタになっている。stInrtListView 構造体に関しては  3.5.1参照。  戻り値   なし。 3.5 ウィンドウスタイル --------------------------------------------------------------------------------  描画部分に関するウィンドウスタイル。ウィンドウスタイルは CreateWindow や GetWindowLong/SetWindowLongにてアクセスする基本ウィンドウスタイルと、ウィンドウ 生成後に、別途指定する拡張ウィンドウスタイルがある。 3.5.1 基本ウィンドウスタイル --------------------------------------------------------------------------------  CreateWindow 呼出し時に指定、または、GetWindowLong/SetWindowLongにてアクセスす る。 (1)ILVS_TOP   項目描画時、表示領域の上端にテキストを揃える。 (2)ILVS_LEFT   項目描画時、表示領域の左端にテキストを揃える。 (3)ILVS_CENTER   項目描画時、表示領域の横方向に中央揃えでテキストを表示する。 (4)ILVS_RIGHT   項目描画時、表示領域の右端にテキストを揃える。 (5)ILVS_VCENTER   項目描画時、表示領域の縦方向に中央揃えでテキストを表示する。ILVS_SINGLELINE  と同時に指定しなければならない。 (6)ILVS_BOTTOM   項目描画時、表示領域の下端にテキストを揃える。ILVS_SINGLELINEと同時に指定し  なければならない。 (7)ILVS_WORDBREAK   項目描画時、テキストを複数行で表示する。キャリッジリターンとラインフィードの  組合せによっても折り返す。 (8)ILVS_SINGLELINE   項目描画時、テキストを単一行で表示する。テキストがキャリッジリターンやライン  フィードを含んでいても、改行しない。 (9)ILVS_END_ELLIPSIS   項目描画時、文字列の最後の部分が長方形領域に納まり切らない場合、はみ出す部分  が切取られ、末尾に省略符号「...」が追加さる。文字列の最後ではない場所にある単  語が長方形領域からはみ出す場合は、省略記号なしで切取られる。   WM5以降にて有効。 (10)ILVS_WORD_ELLIPSIS   項目描画時、表示領域内に納まらない部分がある場合、それを切り取ったうえで、必  ず省略記号「...」を追加する。   WM5以降にて有効。 3.5.2 拡張ウィンドウスタイル --------------------------------------------------------------------------------  ILVM_SETINRTLVSTYLE にて設定、ILVM_GETINRTLVSTYLE にて設定を取得する。 (1)ILVS_MULTIPLESEL   現在未サポート。   将来、リスト上にて複数選択サポート時に利用予定。 (2)ILVS_CYCLIC   リストの先頭と末尾を連結して表示する。 (3)ILVS_TEXTSHADOW   項目描画時、テキストの影を描画する。 3.6 構造体 --------------------------------------------------------------------------------  描画部分に関する構造体。 3.6.1 ILVが保持する各種情報 --------------------------------------------------------------------------------  ILVはウィンドウに関連付けられる32ビットの値に、関連する情報を持つ構造体のポイ ンタ設定している。この構造体の宣言は以下のとおり。ただし、この構造体の内容は処理 に直結するため、直接参照、変更しないことを推奨する。  ただ、描画処理をカスタマイズする場合、一部の情報が必要となるため、一部を抜粋し て説明する。 typedef struct tagInrtListView { unsigned long ulStyle; int nTopIndex; int nCrntIx; int nMovingFlag; //移動中 int nDowningFlag; //LButton Down中 int nMoveThrsHldX; int nMoveThrsHldY; int nTapBgnX; int nTapBgnY; int nMovingX; int nMovingY; int nInrtBgnX; int nInrtBgnY; int nTapEndX; //設定しているが未使用 int nTapEndY; //設定しているが未使用 int nMovRotate; HANDLE hInrtScrlThread; int nThreadExit; DWORD dwTapScrlBgn; DWORD dwTapScrlEnd; HFONT hfntText; COLORREF clrBkNull; COLORREF clrText; COLORREF clrBkText; COLORREF clrTextShadow; COLORREF clrBkItem; COLORREF clrBrdrColor; COLORREF clrSelText; COLORREF clrSelBkText; COLORREF clrSelTextShadow; COLORREF clrSelBkItem; COLORREF clrSelBrdrColor; HDC hMemDC; HBITMAP memBM; void* pFn[ILVI_FN_MAX]; stListInfo stValList; int nItemHeight; } stInrtListView, *pstInrtListView;  メンバ(抜粋)   ulStyle    拡張ウィンドウスタイル。   nCrntIx    現在の項目のインデックス。   nDowningFlag    タップダウン状態。0はタップしていない。0以外はタップダウン中。   hfntText    項目描画時のテキストのフォントのハンドル。   clrBkNull    項目が無い個所の色。   clrText    項目非選択時のテキストの色。   clrBkText    項目非選択時のテキストの背景色。   clrTextShadow    項目非選択時のテキストの影の色。   clrBkItem    項目非選択時の項目の背景色。   clrBrdrColor    項目非選択時の項目間の境界線の色。   clrSelText    項目選択時のテキストの色。   clrSelBkText    項目選択時のテキストの背景色。   clrSelTextShadow    項目選択時のテキストの影の色。   clrSelBkItem    項目選択時の項目の背景色。   clrSelBrdrColor    項目選択時の項目間の境界線の色。   stValList    項目リスト。項目リストに関しては4.x参照。   nItemHeight    既定の項目描画高さ。 3.6.2 描画引数構造体 --------------------------------------------------------------------------------  関数IDの ILVI_FN_DRAWITEM、ILVI_FN_DRAWITEMBKGDに指定されて補助関数呼び出し時、 lParamにて引き渡される描画に関する情報。 typedef struct tagInrtListDrawArg { HDC hDC; RECT* prcDraw; HBRUSH hbrDraw; HBRUSH hbrSelDraw; HBRUSH hbrNull; HPEN hpenNoSelBorder; HPEN hpenSelBorder; int nDrawIx; } stInrtListDrawArg;  メンバ   hDC    デバイスコンテキストのハンドル。   prcDraw    対象項目を描画する長方形領域。   hbrDraw    項目非選択時に背景を描画するブラシのハンドル。   hbrSelDraw    項目選択時に背景を描画するブラシのハンドル。   hbrNull    項目が無い個所の背景を描画するブラシのハンドル。   hpenNoSelBorder    項目非選択時に項目間の境界線を描画するペンのハンドル。   hpenSelBorder    項目選択時に項目間の境界線を描画するペンのハンドル。   nDrawIx    対象の項目のインデックス。 4.項目リスト(ILVItemList.h) --------------------------------------------------------------------------------  項目リストはILVの項目情報を管理する部分となる。項目情報としては必ずしも、この 関数、構造体である必要はない。項目情報を拡張/見直することが可能。これと同等のイ ンタフェースを備えた関数、構造体の別途用意し、描画部分の ILVM_SETFNPTR にて関数 を設定することにより、項目リストを置換することが可能。  置換した例としては iledit の UserItemList.h 参照。 4.1 操作関数 -------------------------------------------------------------------------------- ( 1)ILVItemInitList    項目リストを初期化する。 ( 2)ILVItemInitList    初期値を設定して項目リストを初期化する。 ( 3)ILVItemDeleteList   項目リストを削除する。 ( 4)ILVItemDeleteList   項目リストを削除後、指定の条件により項目リストを初期化する。 ( 5)ILVItemAddItem    指定の項目を項目リストの末尾に追加する。 ( 6)ILVItemInsertItem   項目リストの指定の位置に項目を挿入する。 ( 7)ILVItemDeleteItem   項目リストの指定の位置の項目を削除する。 ( 8)ILVItemFindItem    項目リストから指定条件の項目を検索する。 ( 9)ILVItemGetItemState  指定の項目のステータスを取得する。 (10)ILVItemSetItemState  指定の項目にステータスを設定する。 (11)ILVItemGetItemNum   項目リストが保持している項目数を取得する。 (12)ILVItemGetItemHeight 指定の項目の表示高さを取得する。 (13)ILVItemSetItemHeight 指定の項目に表示高さを設定する。 (14)ILVItemGetItem    指定の項目の値を指定の構造体に取得する。 (15)ILVItemSetItem    指定の項目に構造体の値を設定する。 (16)ILVItemReleaseItem  項目リストを初期化。 (17)ILVItemGetDisplayItem 指定項目を表示する時の文字列を取得する。 (1)ILVItemInitList  項目リストを初期化する。  関数宣言   int ILVItemInitList(stListInfo* pstList)  引数   pstList     項目リストのポインタ。  戻り値   なし。 (2)ILVItemInitList  初期値を設定して項目リストを初期化する。  関数宣言   int ILVItemInitList(stListInfo* pstList, int nMax, int nStep)  引数   pstList     項目リストのポインタ。   nMax     項目の配列の最大値。   nStep     項目の配列拡大時の増分。  補足   nMax の値が0より大きい場合、初期化の時点で配列の領域を確保する。  戻り値   なし。 (3)ILVItemDeleteList  項目リストを削除する。  関数宣言   int ILVItemDeleteList(stListInfo* pstList)  引数   pstList     項目リストのポインタ。  戻り値   なし。 (4)ILVItemDeleteList  項目リストを削除後、指定の条件により項目リストを初期化する。  関数宣言   int ILVItemDeleteList(stListInfo* pstList, int nMax, int nStep)  引数   pstList     項目リストのポインタ。   nMax     項目の配列の最大値。   nStep     項目の配列拡大時の増分。  戻り値   なし。 (5)ILVItemAddItem  指定の項目を項目リストの末尾に追加する。  関数宣言   int ILVItemAddItem(stListInfo* pstList, stILVItemInfo* pstItem)  引数   pstList     項目リストのポインタ。   pstItem     登録する項目の値を格納した stILVItemInfo 構造体のポインタを指定する。  戻り値   なし。 (6)ILVItemInsertItem  項目リストの指定の位置に項目を挿入する。  関数宣言   int ILVItemInsertItem(stListInfo* pstList, int nItem, stILVItemInfo* pstItem)  引数   pstList     項目リストのポインタ。   nItem     挿入する項目のインデックス。   pstItem     挿入する項目の値を格納した stILVItemInfo 構造体のポインタを指定する。  戻り値   なし。 (7)ILVItemDeleteItem  項目リストの指定の位置の項目を削除する。  関数宣言   int ILVItemDeleteItem(stListInfo* pstList, int nItem)  引数   pstList     項目リストのポインタ。   nItem     削除する項目のインデックス。  戻り値   なし。 (8)ILVItemFindItem  項目リストから指定条件の項目を検索する。  関数宣言   int ILVItemFindItem(stListInfo* pstList, int nStart, stILVItemInfo* pstItem)  引数   pstList     項目リストのポインタ。   nStart     検索を開始する項目のインデックス。最初の項目のインデックスは0。   pstItem     検索する項目の条件を指定した stILVItemInfo 構造体のポインタ。この構造体    のメンバ pszText に完全一致する項目を検索する。  戻り値   該当する項目が見つかった場合は、その項目のインデックス。見つからなかった場合  は -1。 (9)ILVItemGetItemState  指定の項目のステータスを取得する。  関数宣言   unsigned int ILVItemGetItemState(stListInfo* pstList, int nItem)  引数   pstList     項目リストのポインタ。   iItem     項目のインデックス。  戻り値   項目のステータスの値。詳細は4.2参照。 (10)ILVItemSetItemState  指定の項目にステータスを設定する。  関数宣言   int ILVItemSetItemState(stListInfo* pstList, int nItem, unsigned int nStat)  引数   pstList     項目リストのポインタ。   nItem     項目のインデックス。   nStat     項目のステータスの値。詳細は4.2参照。  戻り値   なし。 (11)ILVItemGetItemNum  項目リストが保持している項目数を取得する。  関数宣言   int ILVItemGetItemNum(stListInfo* pstList)  引数   pstList     項目リストのポインタ。  戻り値   項目リストが保持している項目数。 (12)ILVItemGetItemHeight  指定の項目の表示高さを取得する。  関数宣言   int ILVItemGetItemHeight(stListInfo* pstList, int nItem)  引数   pstList     項目リストのポインタ。   nItem     項目のインデックス。  戻り値   項目の表示高さを返す。エラーが発生した場合は負の値を返す。 (13)ILVItemSetItemHeight  指定の項目に表示高さを設定する。  関数宣言   int ILVItemSetItemHeight(stListInfo* pstList, int nItem, int nHeight)  引数   pstList     項目リストのポインタ。   nItem     項目のインデックス。   nHeight     設定する項目の表示高さ。  戻り値   正常に登録できた場合は0を返す。エラーが発生した場合は負の値を返す。 (14)ILVItemGetItem  指定の項目の値を指定の構造体に取得する。  関数宣言   int ILVItemGetItem(stListInfo* pstList, int nItem, stILVItemInfo* pstItem)  引数   pstList     項目リストのポインタ。   nItem     項目のインデックス。   pstItem     取得した値を格納する項目の構造体のポインタ。  戻り値   正常に登録できた場合は0を返す。エラーが発生した場合は負の値を返す。 (15)ILVItemSetItem  指定の項目に構造体の値を設定する。  関数宣言   int ILVItemSetItem(stListInfo* pstList, int nItem, stILVItemInfo* pstItem)  引数   pstList     項目リストのポインタ。   nItem     項目のインデックス。   pstItem     設定する項目の値を格納した構造体のポインタ。  補足   pstItem に取得した項目の値は不要になったら ILVItemReleaseItem 関数により領域  を解放する。  戻り値   正常に登録できた場合は0を返す。エラーが発生した場合は負の値を返す。 (16)ILVItemReleaseItem  項目リストを初期化。  関数宣言   int ILVItemReleaseItem(stILVItemInfo* pstItem)  引数   pstList     項目リストのポインタ。   pstItem     値を解放する項目の stILVItemInfo 構造体のポインタ。  戻り値   なし。 (17)ILVItemGetDisplayItem  指定項目を表示する時の文字列を取得する。  関数宣言   LPCTSTR ILVItemGetDisplayItem(stListInfo* pstList, int nItem)  引数   pstList     項目リストのポインタ。   nItem    取得する項目位置のインデックス。  補足   取得した文字列領域は不要になったら delete [] により解放する。  戻り値   表示する時の文字列のポインタを返す。エラー時は NULL を返す。 4.2 項目の状態 --------------------------------------------------------------------------------  項目の状態はビット列にて表す。ビット列にアクセスするマスクを以下に示す。 (1)ILV_STATE_SEL   現在未サポート。   将来、リスト上にて複数選択サポート時に利用予定。 (2)ILV_STATE_OPEN   項目描画時、項目の表示状態を示す。この値が設定されている場合は開いた(サンプ  ルのソースでは項目高さが高い)状態となる。 4.3 構造体 --------------------------------------------------------------------------------  データ管理部に関数る構造体。 4.3.1 項目リストの管理情報 --------------------------------------------------------------------------------  項目リスト全体を関する情報を保持する構造体。 typedef struct tagListInfo { void *pBody; int nItemNum; int nItemMax; int nExtStep; } stListInfo;  メンバ   pBody    項目情報の配列。項目情報は4.2.2の stILVItemInfo 構造体にて保持される。   配列はこの項目情報の構造体の配列となる。    配列のインデックスは0からnItemNum - 1 までが有効。またこの間連続して格納し   ている。nItemNum 以降の内容は不定。    配列のサイズ拡張時、再度領域を確保し直すため、pBody の値は一定ではない。   nItemNum    項目の個数。   nItemMax    pBody が保持する配列のサイズ。nItemNum の数が減少しても配列全体のサイズは   変化はしない。   nExtStep    pBody の配列拡張時、拡張するサイズ。 4.3.2 項目が保持する情報 --------------------------------------------------------------------------------  個々の項目が保持する情報。この構造体のメンバは typedef struct tagILVItemInfo { unsigned int nState; int nHeight; LPCTSTR pszText; } stILVItemInfo;  メンバ   nState    項目の状態。個々の項目毎に状態を保持する場合、このメンバに類する情報が必須。    この値は ILVItemSetItemState または ILVItemGetItemState 関数にてアクセスす   ることが望ましい。   nHeight    項目の表示高さ。個々の項目毎に高さを管理する場合、このメンバに類する情報が必   須。    この値は ILVItemSetItemHeight または ILVItemGetItemHeight 関数にてアクセス   することが望ましい。   pszText    項目が保持するテキスト情報。    サンプルでは、ILVItemGetDisplayItem 関数にて、この値のコピーを返して描画し   ている。 変更履歴 2009/12/16 ・ILVM_GETITEMDATA/ILVM_SETITEMDATAをILVM_GETITEM/ILVM_SETITEMに変更。  これ合わせて、ILVI_FN_GETITEMDATA/ILVI_FN_SETITEMDATAを  ILVI_FN_GETITEM/ILVI_FN_SETITEMに変更。 ・ILVM_RELEASEITEMとILVI_FN_RELEASEITEMを追加。 ・ILVIH_DEFAULTをILVI_DEFAULTに変更(ILVM_GETITEMHEIGHT, ILVM_SETITEMHEIGHT)。 ・以下のイベント/関数実行中にエラーが発生したら戻り値としてエラー値を返すように  変更。  WM_CREATE  WM_DESTROY  WM_PAINT  WM_PAINTから呼ばれる InrtListViewOnDrawItem 関数(ILVI_FN_DRAWITEM に対応する補助関数)  ILVM_DELETEALLITEMS  ILVM_ADDITEM  ILVM_INSERTITEM  ILVM_DELETEITEM  ILVM_SETITEMSTATE  ILVM_SETITEMHEIGHT  ILVM_SETTOPINDEX  ILVM_SETCURSEL ・ILVM_GETITEMRECT にて既定の矩形領域サイズのみだけなく、指定の項目の矩形領域サ  イズを返すように変更。 ・ILVM_GETITEM にて項目リストのアドレスを返すのではなく、引数に指定された構造体  にコピーした値を設定するように変更。戻り値も値でなく、実行結果を返すように変更。 ・WM_PAINTから呼ばれる ILVItemGetDisplayItem 関数(ILVI_FN_GETDISPLAYITEM に対応  する補助関数)にて表示する文字列の領域を確保して返すように変更。このため、呼出  し側にて、受取った領域を解放する必要がある。 2009/11/24  初版公開。 −以上−